package com.candy.dao;

import java.sql.*;
import java.util.*;

public class DBHelper {
    /**
     * 创建数据库链接对象
     * @return
     */
    public static Connection getConn(){
        Connection conn=null;
        try {
//        1、注册或实例化jdbc的驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2、获取数据库的连接对象Connection
//            jdbc:mysql使用jdbc链接mysql数据库
//            localhost 表示要链接的数据库的ip  localhost和127.0.0.1一样表示本机
//            database_name：数据库名
            String url="jdbc:mysql://localhost:3306/mall?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
            String username="root";
            String userpw="123456";
            conn= DriverManager.getConnection(url,username,userpw);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 查询方法的封装
     * @param strSql
     * @return
     */
    public static List<Map<String,Object>> query4ListMap(String strSql){
        List<Map<String,Object>> lp=null;
        try (
                Connection conn= getConn();
                //3、获取数据库操作对象Statement（执行增删改查）
                Statement ment= conn.createStatement();
                //4、执行SQL语句，获取数据操作结果或者结果集对象ResultSet
                ResultSet re= ment.executeQuery(strSql);
                ){
            //5、解析结果集对象ResultSet，进行相关的业务处理；
//            由于需要关闭相关资源，在获取结果集后可以进行数据转储操作
//            常见的 数据转储方式有；list+map  以及list+bean
//            下面讲解以list+map为例
//            准备一个容器
            lp=new ArrayList<>();
//            获取 原 数据对象
            ResultSetMetaData rm= re.getMetaData();
//            获取数据表的列的个数
            int count=rm.getColumnCount();
//            准备map存储每一行的数据
            Map<String,Object> eachRow=null;
//            遍历行
            while (re.next()){
                eachRow=new LinkedHashMap<>();
//               遍历列
                for (int i=1;i<=count;i++){
                    eachRow.put(rm.getColumnLabel(i),re.getObject(rm.getColumnLabel(i)));
                }
//                将每一行放在list容器中
                lp.add(eachRow);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lp;
    }

    /**
     * 增删改方法的封装
     * @param strSql
     * @return
     */
    public static  int update(String strSql){
        int num=0;
        try (
                Connection conn= getConn();
                //3、获取数据库操作对象Statement（执行增删改查）
                Statement ment= conn.createStatement();
                ){
          num= ment.executeUpdate(strSql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return num;
    }

}
